<?php
//界定符  //  ##  {}
//表示一个正则表达式的开始和结束
//例  / [0-9]/


//正则表达式工具  regexpal


//原子符  a-z  A-Z  0-9等等+不可见空格 制表符  回车
//遇到汉字匹配时，为避免由编码不同引起的错误，需要将汉字转为unicode编码

//遇到正则表式运算符匹配时，用\转义
//
//直接用空格匹配空格，\t匹配tab制表符  \n匹配回车(\n+其他字符可以看见效果)


//元字符
//
// 1 原子的筛选方式
//  |  匹配两个或多个分支选择【可以是多个原子】
//  []  匹配方括号中的任意一个原子
//  -  表示范围  [a-z]  a到z
//  [^]  匹配除方括号中的原子之外的任意字符  **[^34f]取反  [56^4]只会当成四个原子中的一个

//2   原子的集合
//  .  匹配除换行符之外的任意字符
//  \d  匹配任意一个十进制数字  [0-9]
//  \D  匹配任意一个非十进制数  [^0-9]
//  \s  匹配一个不可见原子 [\f\n\r\t\v]
//  \S  匹配一个可见原子  [^\f\n\r\t\v]
//  \w  匹配任意一个数字、字母或下划线  [0-9a-zA-Z_]
//  \W  匹配任意一个非数字、字母或下划线  [^0-9a-zA-Z_]

//量词  []  \d  都可以使用   4*5==45|5
//{n}  表示其前面的原子恰好有n个
//{n,}  表示其前面的原子最少有n个
//{n,m}  表示其前面的原子最少有n个，最多m个
//*  匹配0次、1次或者多次其之前的原子 {0,}
//+  匹配1次或多次之前的的原子   {1,}
//?  匹配0次或1次其之前的原子   {0,1}


//边界控制
//^  匹配字符串开始的位置  即限制正则表达式必须以什么开头  例 ^D  以D开头，前面不能有其他字符
//$  匹配字符串结尾的位置  即限制正则表达式必须以什么结尾  例 t$  以t结尾


//模式单元
//（）  匹配其中的整体为一个原子


//修正模式
//  U  懒惰匹配
//  u  贪婪模式
//  i  忽略英文字母大小写
//  x  忽略空白 包括空格和制表符
//  s  让元字符'.'匹配包括换行符在内的所有字符
//  e
//可以连用  例 Ui
//
//
function show($var = null){
	if(empty($var)){
		echo 'null';
	}elseif (is_array($var) || is_object($var)) {
		//array,object
		echo '<pre>';
		print_r($var);
		echo '</pre>';
	}else {
		//string,int float...
		echo $var;
	}
}

//1贪婪匹配（默认）
//  匹配结果存在歧义时取其长
$pattern = '/imooc.+123/';   //含义：imooc……123
$subject = 'I Love imooc__123123123123123123123';
$matches =array();
preg_match($pattern, $subject,$matches);
show($matches);
echo "<br/>";
//2懒惰匹配 '/imooc.+123/U'
//   匹配结果存在歧义时取其短
//
$pattern = '/imooc.+123/U'; 
preg_match($pattern, $subject,$matches);
show($matches);
?>